/**
 * Description:
 * Class Name:AttributeViewTest
 * Date:2022/5/4 17:52
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第15章_输入输出._15_10_NIO2的功能和用法._15_10_4_访问文件属性;

import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.*;
import java.util.Date;
import java.util.List;

public class AttributeViewTest {
    public static void main(String[] args) throws Exception{
        String path = "./src/" + AttributeViewTest.class.getName().replace(".", "/") + ".java";
        // 获取将要操作的文件
        Path testPath = Paths.get(path);

        // 获取访问基本属性的视图View
        BasicFileAttributeView basicView = Files.getFileAttributeView(testPath, BasicFileAttributeView.class);
        // 获取访问基本属性的BasicFileAttributes
        BasicFileAttributes basicAttributes = basicView.readAttributes();
        // 访问文件的基本属性
        System.out.println("创建时间：" + new Date(basicAttributes.creationTime().toMillis()));
        System.out.println("最后访问时间：" + new Date((basicAttributes.lastAccessTime().toMillis())));
        System.out.println("最后修改时间：" + new Date(basicAttributes.lastModifiedTime().toMillis()));
        System.out.println("该文件大小：" + basicAttributes.size());

        // 获取访问文件所有者信息的视图
        FileOwnerAttributeView ownerView = Files.getFileAttributeView(testPath, FileOwnerAttributeView.class);
        System.out.println("该文件的所有者是：" + ownerView.getOwner());
        // 获取系统中guest对应的用户
        UserPrincipal user = FileSystems.getDefault().getUserPrincipalLookupService().lookupPrincipalByName("guest");
//        System.out.println(user);
//        // 修改用户
//        ownerView.setOwner(user);

        // 获取访问自定义属性的视图
        UserDefinedFileAttributeView userDefinedView = Files.getFileAttributeView(testPath, UserDefinedFileAttributeView.class);
        List<String> attrNames = userDefinedView.list();
        for (var name :
                attrNames) {
            ByteBuffer buf = ByteBuffer.allocate(userDefinedView.size(name));
            userDefinedView.read(name, buf);
            buf.flip();
            String value = Charset.defaultCharset().decode(buf).toString();
            System.out.println(name + "--->" + value);
        }
        // 添加一个自定义属性
        userDefinedView.write("发行者", Charset.defaultCharset().encode("Crazy Java"));

        // 访问DOS属性的视图
        DosFileAttributeView dosView = Files.getFileAttributeView(testPath, DosFileAttributeView.class);
        // 将文件设置隐藏、只读
        dosView.setHidden(true);
        dosView.setReadOnly(true);
    }
}
